package org.gbif.occurrence.download.service;
import org.gbif.api.service.occurrence.DownloadRequestService;
import org.gbif.occurrence.common.download.DownloadUtils;
import org.gbif.occurrence.download.service.workflow.DownloadWorkflowParameters;
import org.gbif.service.guice.PrivateServiceModule;
import java.util.Map;
import java.util.Properties;
import javax.mail.Session;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import org.apache.oozie.client.OozieClient;
public class OccurrenceDownloadServiceModule extends PrivateServiceModule {
private static final String PREFIX = "occurrence.download.";
public OccurrenceDownloadServiceModule(Properties properties) {
super(PREFIX, properties);
}
@Override
protected void configureService() {
bind(DownloadEmailUtils.class);
bind(DownloadRequestService.class).to(DownloadRequestServiceImpl.class);
expose(DownloadRequestService.class);
bind(CallbackService.class).to(DownloadRequestServiceImpl.class);
expose(CallbackService.class);
}
@Provides
@Singleton
Session providesMailSession(@Named("mail.smtp") String smtpServer, @Named("mail.from") String fromAddress) {
Properties props = new Properties();
props.setProperty("mail.smtp.host", smtpServer);
props.setProperty("mail.from", fromAddress);
return Session.getInstance(props, null);
}
@Provides
@Singleton
OozieClient providesOozieClient(@Named("oozie.url") String url) {
return new OozieClient(url);
}
@Provides
@Singleton
@Named("oozie.default_properties")
Map<String,String> providesDefaultParameters(@Named("environment") String environment, @Named("ws.url") String wsUrl,
@Named("hdfs.namenode") String nameNode) {
return new ImmutableMap.Builder<String, String>()
.put(OozieClient.LIBPATH,String.format(DownloadWorkflowParameters.WORKFLOWS_LIB_PATH_FMT,environment))
.put(OozieClient.APP_PATH, nameNode + String.format(DownloadWorkflowParameters.DOWNLOAD_WORKFLOW_PATH_FMT,environment))
.put(OozieClient.WORKFLOW_NOTIFICATION_URL, DownloadUtils.concatUrlPaths(wsUrl, "occurrence/download/request/callback?job_id=$jobId&status=$status"))
.put(OozieClient.USER_NAME, Constants.OOZIE_USER)
.putAll(DownloadWorkflowParameters.CONSTANT_PARAMETERS).build();
}
}